EXPECTED = {'ModuleTagsExplicit': {'extensibility-implied': False,
                        'imports': {},
                        'object-classes': {},
                        'object-sets': {},
                        'types': {'A': {'tag': {'kind': 'EXPLICIT',
                                                'number': 3},
                                         'type': 'INTEGER'},
                                  'AI': {'tag': {'kind': 'IMPLICIT',
                                                 'number': 3},
                                         'type': 'INTEGER'},
                                  'BA': {'tag': {'kind': 'EXPLICIT',
                                                 'number': 4},
                                         'type': 'A'},
                                  'BIA': {'tag': {'kind': 'IMPLICIT',
                                                  'number': 4},
                                           'type': 'A'},
                                  'BIAI': {'tag': {'kind': 'IMPLICIT',
                                                   'number': 4},
                                           'type': 'AI'},
                                  'C1': {'members': [{'members': [{'name': 'a',
                                                                   'tag': {'kind': 'EXPLICIT',
                                                                           'number': 0},
                                                                   'type': 'INTEGER'}],
                                                      'name': 'a',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 0},
                                                      'type': 'CHOICE'}],
                                         'type': 'CHOICE'},
                                  'CBA': {'tag': {'kind': 'EXPLICIT',
                                                  'number': 5},
                                          'type': 'BA'},
                                  'CBIAI': {'tag': {'kind': 'EXPLICIT',
                                                    'number': 5},
                                            'type': 'BIAI'},
                                  'CIBIA': {'tag': {'kind': 'IMPLICIT',
                                                    'number': 5},
                                            'type': 'BIA'},
                                  'CIBIAI': {'tag': {'kind': 'IMPLICIT',
                                                     'number': 5},
                                             'type': 'BIAI'},
                                  'S1': {'members': [{'name': 'a',
                                                      'type': 'INTEGER'},
                                                     {'name': 'b',
                                                      'optional': True,
                                                      'type': 'BOOLEAN'}],
                                         'type': 'SEQUENCE'},
                                  'S2': {'members': [{'name': 'a',
                                                      'type': 'INTEGER'},
                                                     {'name': 'b',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 2},
                                                      'type': 'S1'},
                                                     {'members': [{'name': 'a',
                                                                   'type': 'BOOLEAN'}],
                                                      'name': 'c',
                                                      'type': 'CHOICE'}],
                                         'type': 'SEQUENCE'},
                                  'S3': {'members': [{'name': 'a',
                                                      'type': 'INTEGER'},
                                                     {'name': 'b',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 2},
                                                      'type': 'S1'},
                                                     {'members': [{'name': 'a',
                                                                   'type': 'BOOLEAN'}],
                                                      'name': 'c',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 3},
                                                      'type': 'CHOICE'}],
                                         'type': 'SEQUENCE'},
                                  'S4': {'members': [{'name': 'a',
                                                      'type': 'INTEGER'},
                                                     {'name': 'b',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 1},
                                                      'type': 'C1'},
                                                     {'name': 'c',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 2},
                                                      'type': 'S1'},
                                                     {'members': [{'name': 'a',
                                                                   'type': 'BOOLEAN'}],
                                                      'name': 'd',
                                                      'type': 'CHOICE'}],
                                         'type': 'SEQUENCE'},
                                  'S5': {'members': [{'name': 'a',
                                                      'type': 'INTEGER'},
                                                     {'name': 'b',
                                                      'type': 'S1'},
                                                     {'members': [{'name': 'a',
                                                                   'type': 'BOOLEAN'}],
                                                      'name': 'c',
                                                      'type': 'CHOICE'}],
                                         'type': 'SEQUENCE'},
                                  'S6': {'members': [{'name': 'a',
                                                      'type': 'INTEGER'},
                                                     None,
                                                     {'name': 'b',
                                                      'type': 'BOOLEAN'}],
                                         'type': 'SEQUENCE'},
                                  'S7': {'members': [{'name': 'a',
                                                      'tag': {'kind': 'EXPLICIT',
                                                              'number': 2},
                                                      'type': 'INTEGER'},
                                                     None,
                                                     {'name': 'b',
                                                      'type': 'BOOLEAN'}],
                                          'type': 'SEQUENCE'},
                                   'S8': {'members': [{'element': {'members': [{'name': 'a',
                                                                                'type': 'INTEGER'},
                                                                               {'name': 'b',
                                                                                'type': 'BOOLEAN'}],
                                                                   'type': 'CHOICE'},
                                                       'name': 'a',
                                                       'type': 'SEQUENCE OF'}],
                                         'type': 'SEQUENCE'},
                                  'S9': {'members': [{'element': {'members': [{'name': 'a',
                                                                               'type': 'INTEGER'},
                                                                              {'name': 'b',
                                                                               'type': 'BOOLEAN'}],
                                                                  'type': 'CHOICE'},
                                                      'name': 'a',
                                                      'type': 'SET OF'}],
                                         'type': 'SET'},
                                  'Type1': {'type': 'VisibleString'},
                                  'Type2': {'tag': {'class': 'APPLICATION',
                                                    'kind': 'IMPLICIT',
                                                    'number': 3},
                                            'type': 'Type1'},
                                  'Type3': {'tag': {'kind': 'EXPLICIT',
                                                    'number': 2},
                                            'type': 'Type2'},
                                  'Type4': {'tag': {'class': 'APPLICATION',
                                                    'kind': 'IMPLICIT',
                                                    'number': 7},
                                            'type': 'Type3'},
                                  'Type5': {'tag': {'kind': 'IMPLICIT',
                                                    'number': 2},
                                            'type': 'Type2'}},
                        'values': {}}}
